function createStore(reducer) {
	if (typeof reducer !== "function") {
		throw new TypeError('reducer must be a function！');
	}

	//=>状态和事件池
	let state;
	let listeners = [];

	//=>获取容器中的状态
	const getState = function getState() {
		// 防止返回的状态和原始状态公用相同的空间，这样会导致获取状态后直接就能修改容器中的状态信息
		return JSON.parse(JSON.stringify(state));
	};

	//=>向容器事件池中追加方法的
	const subscribe = function subscribe(func) {
		if (typeof func !== "function") return;
		if (!listeners.includes(func)) {
			listeners.push(func);
		}
		return function unsubscribe() {
			listeners = listeners.filter(item => item !== func);
		};
	};

	//=>派发行为任务
	const dispatch = function dispatch(action) {
		if (action === null || action === undefined) return;
		if (typeof action !== "object") return;
		if (!action.hasOwnProperty('type')) return;

		//=>通知reducer执行，把返回值替换原始的状态信息
		state = reducer(state, action);

		//=>如果状态改变通知事件池中的方法依次执行
		listeners.forEach(item => {
			item();
		});
	};

	//=>初始的时候我们自己先派发一次dispatch：目的是给状态赋值初始值
	dispatch({
		type: `@@redux/INIT${Math.random()}`
	});

	return {
		getState,
		dispatch,
		subscribe
	};
}

export {
	createStore
};